// ignore_for_file: slash_for_doc_comments

import 'package:shared_preferences/shared_preferences.dart';

class TokenManager {
  //私有变量存储token
  String? _token;
  // 常量
  final String _key = 'enjoy_token_three';

  // 1、使用_instance变量来存储类的唯一实例
  static TokenManager? _instance;
  // 2、私有的构造函数，确保外部不能直接创建实例,
  //该方法可以直接产生一个实例TokenManager(),该方法创建的实例会作为_instance的值
  TokenManager._internal();

  /**  3、factory TokenManager()工厂方法
   *    用于检查_instance是否已初始化
   *    若未初始化,则通过私有构造函数创建实例并赋值
   *    最后返回_instance
  */
  factory TokenManager() {
    _instance ??= TokenManager._internal();
    return _instance!;
  }

  // 提供init方法用于从本地获取token
  Future<void> init() async {
    // 获取preferences实例
    final SharedPreferences preferences = await SharedPreferences.getInstance();
    _token = preferences.getString(_key) ?? '';
  }

  // 提供saveToken方法存储token
  Future<void> saveToken(String token) async {
    final SharedPreferences preferences = await SharedPreferences.getInstance();
    await preferences.setString(_key, token);
    _token = token;
  }

  // 提供getToken方法用于同步获取token
  String? getToken() {
    return _token;
  }

  // 提供removeToken方法用于删除token
  Future<void> removeToken() async {
    final SharedPreferences preferences = await SharedPreferences.getInstance();
    preferences.remove(_key);
    _token = null;
  }
}
